package br.com.gestantes.controle;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import br.com.gestantes.modelo.Estoque;
import br.com.gestantes.modelo.OrdemCompra;
import br.com.gestantes.modelo.serraria.PedidoSerraria;

/**
 * Handles requests for the application home page.
 */
@Controller
public class SerrariaController {

	private static final Logger logger = LoggerFactory.getLogger(SerrariaController.class);

	/**
	 * Simply selects the serraria view to render by returning its name.
	 */
	@RequestMapping(value = "/serraria", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		logger.info("Serraria Controller.");

		List<PedidoSerraria> pedidosNovos = listaPedidosNovos();
		model.addAttribute("pedidosNovos", pedidosNovos);
		model.addAttribute("qtdPedidosNovos", Integer.toString(pedidosNovos.size()));
		
		List<PedidoSerraria> pedidosPendentes = listaPedidosPendentes();
		model.addAttribute("pedidosPendentes", pedidosPendentes);
		model.addAttribute("qtdPedidosPendentes", Integer.toString(pedidosPendentes.size()));
		
		List<PedidoSerraria> pedidosConcluidos = listaPedidosConcluidos();
		model.addAttribute("pedidosConcluidos", pedidosConcluidos);
		model.addAttribute("qtdPedidosConcluidos", Integer.toString(pedidosConcluidos.size()));
		
		model.addAttribute("pedidoSerraria", new PedidoSerraria());
		
		return "serraria";
	}

	
	@RequestMapping(value = "pedirPlaca", method = RequestMethod.POST)
	public String addPedirPlaca(@ModelAttribute("pedidoSerraria")
	PedidoSerraria pedido, BindingResult result) {

		logger.info("Pedido "+pedido.getNumeroPedido()+" enviado para o REMP");
		
		//UPDATE PEDIDOS_SERRARIA SET ped_serr_enum_status = 'Pendente' WHERE ped_serr_sq_pedido_serraria = 1;
		
		return "";
	}
	
	private List<PedidoSerraria> listaPedidosConcluidos(){

		return listaPedidos("Concluído");
	}

	private List<PedidoSerraria> listaPedidosPendentes(){

		return listaPedidos("Pendente");
	}


	private List<PedidoSerraria> listaPedidosNovos(){

		return listaPedidos("Novo");
	}

	private List<PedidoSerraria> listaPedidos(String status){

		List<PedidoSerraria> pedidos = new ArrayList<PedidoSerraria>();

		Connection con = null;
		Statement st = null;
		ResultSet rs = null;

		String driver = "org.postgresql.Driver";
		String url = "jdbc:postgresql://localhost:5432/gestantes";
		String user = "root";
		String password = "123";

		try {
			Class.forName(driver).newInstance();
			con = DriverManager.getConnection(url, user, password);
			st = con.createStatement();
			rs = st.executeQuery("SELECT ped_serr_sq_pedido_serraria, ped_serr_sq_usuario, ped_serr_dt_data, ped_serr_sq_item, ped_serr_int_qtd, ped_serr_enum_status FROM PEDIDOS_SERRARIA WHERE ped_serr_enum_status = '"+status+"'");

			while(rs.next()) {

				PedidoSerraria pedido = new PedidoSerraria();

				pedido.setNumeroPedido(rs.getLong("ped_serr_sq_pedido_serraria"));
				pedido.setIdUsuario(rs.getInt("ped_serr_sq_usuario"));
				pedido.setData(rs.getTimestamp("ped_serr_dt_data"));
				
				int item = rs.getInt("ped_serr_sq_item");
				
				pedido.setIdItem(item);
				
				pedido.setNomeItem(Estoque.produtos.get(item).getNome());
				
				pedido.setQuantidade(rs.getInt("ped_serr_int_qtd"));
				pedido.setStatus(rs.getString("ped_serr_enum_status"));

				pedidos.add(pedido);
			}

		} catch (SQLException ex) {

			ex.printStackTrace();

		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				if (rs != null) {
					rs.close();
				}
				if (st != null) {
					st.close();
				}
				if (con != null) {
					con.close();
				}

			} catch (SQLException ex) {
				ex.printStackTrace();
			}
		}

		return pedidos;
	}


}
